//1、模拟实现strcmp
/*首先来说说strcmp()函数
1、它是用来比较两个字符串内容大小的
2、比如比较arr1和arr2两个字符串，
如果arr1>arr2会返回1，否则返回-1，相等返回0
*/

//测试strcmp()库函数功能
// #include<stdio.h>
// #include<string.h>//必须包含头文件
// int main()
// {
//     char arr1[]="hello word!";
//     char arr2[]="hello word!";
//     printf("%d\n",strcmp(arr1,arr2));//0

//     char arr3[]="hello word!";
//     char arr4[]="hello";
//     printf("%d\n",strcmp(arr3,arr4));//1

//     char arr5[]="hello";
//     char arr6[]="hello word!";
//     printf("%d\n",strcmp(arr5,arr6));//-1
//     return 0;
// }


// //自己模拟实现strcmp函数功能——my_strcmp()

// #include<stdio.h>
// #include<assert.h>
// int my_strcmp(
//     const char* s1,const char* s2)//用const修饰，为了防止字符串被修改
// {
//     //检查是否传入空指针，所以断言一下
//     assert(s1);
//     assert(s2);
//     //不为空指针后，进行比较
//     while(*s1==*s2)
//     {
//         if(*s1=='\0')//检测其中一个都可以
//         {
//             return 0;
//         }
//         s1++;
//         s2++;
//     }
//     if(*s1>*s2)
//         return 1;
//     else
//         return -1;
//     //return *s1 - *s2;
// }

// int main()
// {
//     char str1[]="abcdef";
//     char str2[]="abcdef";
//     printf("%d\n",my_strcmp(str1,str2));//0

//     char str3[]="abcdefg";
//     char str4[]="abcdef";
//     printf("%d\n",my_strcmp(str3,str4));//1

//     char str5[]="abcde";
//     char str6[]="abcdef";
//     printf("%d\n",my_strcmp(str5,str6));//-1
//     return 0;
// }


// //2、模拟实现strstr
// /*strstr()函数功能
// 1、查找子串是否在原字符串中有。
// 2、如果有，就返回第一个符合的字符*/
// #include<stdio.h>
// #include<assert.h>
// //#include<string.h>
// char* my_strstr(const char* s1,const char* s2)
// {
//     //我们想让他们之间进行比较，首先在源字符串首先元素开始和字串比较
//     //如果原串不和字串第一个相同，那么原串往后移动，直到找到和字串相
//     //同的那个开始记起，两个相同就都往后移.若后面不相同，原串又从上一次
//     //相同的元素的下一个位置开始，和字串重新比较，依次比较和循环上面操作，直到找到。如果
//     //原串都到'\0'了，说明不包含字串。若字串到'\0'说明包含字串，返回原串和字串第一个元素相同的地址。
//     assert(s1&&s2);
//     if(s2==NULL)
//     {
//         return (char*)s1;
//     }
//     const char* cur=s1;//记录地址
//     const char* ss1=NULL;
//     const char* ss2=NULL;
//     while(*cur)//只要原串不为'\0'就循环
//     {
//         //一开始把原串首地址赋值给ss1,字串首地址赋值给ss2
//         ss1=cur;
//         ss2=s2;
//         //循环比较
//         while(*ss1!='\0'&&*ss2!='\0'&&*ss1==*ss2)
//         {
//             //相同，就递增
//             ss1++;
//             ss2++;
//         }
//         //此处判断ss2为'\0'说明找到了
//         if(*ss2=='\0')
//         {
//             return (char*)cur;//返回找到和字串第一个元素相同的原串的地址
//         }

//         //字串没到达'\0',而原串到达'\0',就改变相同元素的地址，往后移动重新和字串比较
//         cur++;
//     }
//     //此处说明cur到达'\0'，没找到，返回空
//     return NULL;
// }

// int main()
// {
//     //测试库函数strstr()
//     // char arr1[]="abcdefg";
//     // char arr2[]="def";
//     // printf("%s\n",strstr(arr1,arr2));

//     //  char arr3[]="abcdddefg";
//     // char  arr4[]="def";
//     // printf("%s\n",strstr(arr1,arr2));


//     //自己模拟实现strstr()库函数——my_strstr()
//     char arr1[]="abcfdddefg";
//     char arr2[]="def";
//     char* ret=my_strstr(arr1,arr2);
//     if(ret==NULL)
//     {
//         printf("没找到！\n");
//     }
//     else
//     {
//         printf("%s\n",ret);
//     }
//     return 0;
// }